package tantan.mokuai3.homework;

import tantan.mokuai4.homework.AgeExceotion;
import tantan.mokuai4.homework.IdException;

import java.io.*;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/*
* 使用 List 集合实现简易的学生信息管理系统，要求打印字符界面提示用户选择相应的功能，
* 根据用户输入的选择去实现增加、删除、修改、查找以及遍历所有学生信息的功能。
 其中学生的信息有：学号、姓名、年龄。 要求： 尽量将功能拆分为多个.java 文件。
* */
public class ZuoYeSi {

    public static void main(String[] args) {

//        1.打印字符界面并提示用户选择相应的功能
        System.out.println("********************************");
        System.out.println("*****欢迎来到学生管理系统*********");
        System.out.println("*1: 增加学生");
        System.out.println("*2: 删除学生");
        System.out.println("*3: 修改学生年龄");
        System.out.println("*4: 查询学生的姓名和年龄");
        System.out.println("*5: 遍历所有学生信息");
        System.out.println("********************************");
//        2.准备一个Student类型的List集合
        List<Student> lt = new LinkedList<>();    //[啥也没有]
//        将"C:\\file test\\StudentList.txt"文本文件中的学生信息加载到List集合中
        ObjectInputStream ois = null;
        try {
            ois = new ObjectInputStream(new FileInputStream("C:\\file test\\StudentList.txt"));
            lt.add((Student) ois.readObject());
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
//        3.提供扫描器
        Scanner sc = new Scanner(System.in);
//        4.开始进行管理
        boolean b1 = true;  //用来结束while循环
        boolean b2 = true;  //用来判断是否找到对应学生
        while(b1) {
            System.out.println("您想选择的操作是：");
            int choice = sc.nextInt();
            switch (choice) {
//                增加学生
                case 1:
                    System.out.println("请输入学生的姓名");
                    String name = sc.next();
                    System.out.println("请输入学生的学号");
                    String studentId = sc.next();
                    System.out.println("请输入学生的年龄");
                    int age = sc.nextInt();
                    try {
                        try {
                            lt.add(new Student(name, studentId, age));
                        } catch (AgeExceotion ageExceotion) {
                            ageExceotion.printStackTrace();
                        }
                    } catch (IdException e) {
                        e.printStackTrace();
                    }
                    System.out.println("添加成功！");
                    break;
//                删除学生
                case 2:
                    System.out.println("请输入您想删除的学生的学号");
                    String studentId1 = sc.next();
                    for (int i = 0; i < lt.size(); i++) {
                        try {
                            if (studentId1.equals(lt.get(i).getStudentId()))
                            {
                                System.out.println("找到该学生了，正在删除...");
                                lt.remove(i);
                                System.out.println("该学生已被删除");
                                b2 = false;
                            }
                        } catch (IdException e) {
                            e.printStackTrace();
                        }
                    }
                    if(b2){
                        System.out.println("抱歉，没找到该学生");
                    }
                    break;
//                修改学生信息
                case 3:
                    System.out.println("请输入您想修改的学生的学号");
                    String studentId2 = sc.next();
                    for (int i = 0; i < lt.size(); i++) {
                        try {
                            if (studentId2.equals(lt.get(i).getStudentId()))
                            {
                                System.out.println("找到该学生了,请输入您想修改的年龄：");
                                int age1 = sc.nextInt();
                                lt.get(i).setAge(age1);
                                System.out.println("年龄已修改成功！");
                                b2 = false;
                            }
                        } catch (IdException e) {
                            e.printStackTrace();
                        } catch (AgeExceotion ageExceotion) {
                            ageExceotion.printStackTrace();
                        }
                    }
                    if(b2){
                        System.out.println("抱歉，没找到该学生");
                    }
                    break;
//                查询学生的信息
                case 4:
                    System.out.println("请输入您想查询的学生的学号");
                    String studentId3 = sc.next();
                    for (int i = 0; i < lt.size(); i++) {
                        try {
                            if (studentId3.equals(lt.get(i).getStudentId()))
                            {
                                System.out.println("找到该学生了,他是" + lt.get(i).getName() + "今年" + lt.get(i).getAge() + "岁了");
                                b2 = false;
                            }
                        } catch (IdException e) {
                            e.printStackTrace();
                        }
                    }
                    if(b2){
                        System.out.println("抱歉，没找到该学生");
                    }
                    break;
//                遍历所有学生信息
                case 5:
                    System.out.println("所有学生信息：");
                    System.out.println(lt);
                    break;
                default:
                    System.out.println("操作不合理哦！");
            }
//        判断是否继续操作
            System.out.println("是否继续操作");
            String judge = sc.next();
            if(judge.equals("no")){
                b1 = false;
            }
        }
//        将List集合中的学生信息写入到文档中
//        创建对象输出流与"C:\\file test\\StudentList.txt"关联
        ObjectOutputStream oos = null;
        try {
            oos = new ObjectOutputStream(new FileOutputStream("C:\\file test\\StudentList.txt"));
//            将List集合中的对象写入文件
            oos.writeObject(lt);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(null != oos) {
                try {
                    oos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(null != ois){
                try {
                    ois.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
